#include "fileCheck.h"
#include "fileTransfer.h"

int isFileCheck(const char *file_name)
{
    if (access(file_name, F_OK) == 0)
    {
        return FILE_EXIST; // 文件存在，需要续传
    }
    else
    {
        return FILE_NOT_EXIST; // 文件不存在，直接下载
    }
}

int fileCheckCreate(const char *file_name, const fileCheck_t *file_info)
{
    char file_check_name[256];
    snprintf(file_check_name, sizeof(file_check_name), "%s.info", file_name);

    FILE *wfile = fopen(file_check_name, "wb");       // 二进制写模式
    fwrite(file_info, sizeof(fileCheck_t), 1, wfile); // 关键写入操作
    fclose(wfile);

    return 0;
}

int fileCheckUpdate(const char *file_name, const fileCheck_t *file_info)
{
    char file_check_name[256];
    snprintf(file_check_name, sizeof(file_check_name), "%s.info", file_name);

    FILE *wfile = fopen(file_check_name, "wb");
    if (!wfile){
                return -1;
    }

    if (fwrite(file_info, sizeof(fileCheck_t), 1, wfile) != 1)
    {
        fclose(wfile);
        return -2;
    }

    // 数据写入磁盘
    if (fflush(wfile) != 0)
    {
        fclose(wfile);
        return -3;
    }

    fclose(wfile);
    return 0;
}

// 传输完成，删除fileCheck文件
int fileCheckDelete(const char *file_name)
{
    char file_check_name[256];
    snprintf(file_check_name, sizeof(file_check_name), "%s.info", file_name);

    // 删除文件
    if (remove(file_check_name) == 0)
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

// 读取fileCheck文件
int fileCheckRead(const char *file_name, fileCheck_t *file_info)
{
    char file_check_name[256];
    snprintf(file_check_name, sizeof(file_check_name), "%s.info", file_name);

    FILE *rfile = fopen(file_check_name, "rb");
    if (rfile == NULL)
    {
        return -1;
    }

    // 读取一个结构体
    size_t read_count = fread(file_info, sizeof(fileCheck_t), 1, rfile);
    fclose(rfile);
    if (read_count != 1)
    {
        return -2;
    }

    return 0; // 成功
}